<?php

namespace app\admin\validate;

use think\Validate;

class Config extends Validate
{
    protected $failException = true;

    protected $rule = [
        'group' => 'require',
        'name'  => 'require|unique:config',
        'title' => 'require',
        'type'  => 'require|checkValue',
    ];

    /**
     * 验证提示信息
     * @var array
     */
    protected $message = [
        'name.require'  => '变量名不能为空',
        'name.unique'   => '变量名不能重复',
        'group.require' => '分组不能为空',
        'title.require' => '变量标题不能为空',
        'type.require'  => '变量类型不能为空',
        'value.require' => '默认值不能为空',
    ];

    /**
     * 字段描述
     */
    protected $field = [];

    /**
     * 验证场景
     */
    protected $scene = [
        'edit' => ['group', 'name', 'title'],
    ];

    public function __construct()
    {
        $this->field = [
            'name'  => '变量名',
            'group' => '分组',
            'title' => '变量标题',
            'type'  => '变量类型',
        ];
        parent::__construct();
    }

    /**
     * 自定义value验证规则
     * @param $value // 需验证的值
     * @param $rule // 验证规则
     * @param array $data // 数据
     */
    protected function checkValue($value, $rule, array $data = [])
    {
        $arr = ['switch', 'radio'];
        if (in_array($data['type'], $arr) && empty($data['value'])) {
            return '默认值不能为空！';
        } else if (in_array($data['type'], ['radio', 'checkbox']) && empty($data['content'])) {
            return '字典数据不能为空！';
        }
        return true;
    }

}